package com.triones.yjj.mapper;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.mapper.BaseMapperPlus;
import com.triones.yjj.entity.OrderDO;
import com.triones.yjj.entity.StaffDO;
import com.triones.yjj.entity.bo.IsVisitStaffListParams;
import com.triones.yjj.entity.bo.StaffTeamDataParams;
import com.triones.yjj.entity.bo.TeamStaffListParams;
import com.triones.yjj.entity.vo.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 员工 mapper 接口
 *
 * @Author: triones
 */
public interface StaffMapper extends BaseMapperPlus<StaffMapper, StaffDO, StaffVO> {

    /**
     * 查询员工列表
     * @param build
     * @param lqw
     * @return
     */
    Page<StaffListVO> selectPageList(@Param("page") Page<Object> build,@Param(Constants.WRAPPER) QueryWrapper<StaffDO> lqw);

    /**
     * 员工战队列表（分页）
     * @param build
     * @param wrapper
     * @return
     */
    Page<StaffTeamVO> selectTeamPageList(@Param("page") Page<Object> build,@Param(Constants.WRAPPER) QueryWrapper<StaffDO> wrapper);

    /**
     * 获取战队的员工列表
     * @param build
     * @param wrapper
     * @return
     */
    Page<StaffListVO> getTeamStaffPageList(@Param("page") Page<Object> build,@Param(Constants.WRAPPER) QueryWrapper<StaffDO> wrapper);

    /**
     * 查询不存在与该战队的员工列表（分页）
     * @param build
     * @param params
     * @return
     */
    Page<NoExistTeamStaffListVO> teamNoExistStaffPageList(@Param("page") Page<Object> build,@Param("params") TeamStaffListParams params);

    /**
     * 获取是否拥有访问该活动权限的员工列表（分页）
     * @param build
     * @param params
     * @return
     */
    Page<IsVisitActivityStaffListVO> getIsVisitStaffPageList(@Param("page")  Page<Object> build,@Param("params") IsVisitStaffListParams params);

    /**
     * 查询所有已经绑定过该活动的员工列表
     * @param userId
     * @param activityId
     * @return
     */
    List<StaffListVO> relateActivityStaffList(@Param("userId") Long userId,@Param("activityId") Long activityId);

    /**
     * 获取员工数据明细列表（分页）
     * @param build
     * @param wrapper
     * @return
     */
    Page<StaffDetailListVO> staffDetailPageList(@Param("page") Page<Object> build,@Param(Constants.WRAPPER) QueryWrapper<OrderDO> wrapper);

    /**
     * 获取员工排行榜列表（分页）
     * @param build
     * @param params
     * @return
     */
    Page<StaffRankListVO> staffRankPageList(@Param("page") Page<Object> build,@Param("params") StaffTeamDataParams params);

    /**
     * 获取战队统计列表（分页）
     * @param build
     * @param params
     * @return
     */
    Page<StaffRankListVO> teamStatsPageList(@Param("page") Page<Object> build,@Param("params") StaffTeamDataParams params);

    /**
     * 查询员工详情
     * @param wxUserId
     * @param userId
     * @return
     */
    WxStaffDetailVO selectWxStaffDetailById(@Param("wxUserId") Long wxUserId,@Param("userId") Long userId);

    /**
     * 员工商家列表
     * @param openId
     * @return
     */
    List<WxStaffSysUseVO> selectStaffSysUser(@Param("openId") String openId);

    /**
     * 员工排名
     * @param activityId
     * @return
     */
    List<StaffRankListVO> staffRankList(@Param("activityId") Long activityId,@Param("userId") Long userId);

    /**
     * 战队排名
     * @param activityId
     * @return
     */
    List<StaffRankListVO> teamStatsList(@Param("activityId") Long activityId,@Param("userId") Long userId);
}
